// 装饰器 --- 面向对象中的概念
// java 注解  C# 特征  TS 装饰器
// 装饰器是javascript本身就支持的内容
// ES6 提出装饰器提案 --- 2024 stage-3
// react18  vue3
// webpack5 vite

//AngularJS  nodejs后端框架NestJS  鸿蒙

// 装饰器模式 --- 结构设计模式
// 装饰器模式通过将对象置于包含行为的特殊包装器对象中，可以将新的行为附加到对象上。

// 装饰器模式在架构上来说，有时候还不够方便
class User{
  // @required
  // @range(3,5)
  // @description("账号")
  loginId: string; // 必须是3-5个字符，必填
  loginPwd: string; // 必须是6-12个字符，必填
  age: number; // 必须是0-100之间的数字
  gender: "男" | "女"

  validate() { 
    // 对账号进行验证
    // 对密码进行验证
    // 对年龄进行验证
    //...
  }
}

const u = new User();

// function validateUser(user: User) { 
//   // 对账号进行验证
//   // 对密码进行验证
//   // 对年龄进行验证
//   //...
// }

// 1. 关注点分离
// 2. 代码重复

// 这两个问题产生的根源:就是我们在定义某些信息时候，能够附加的信息有限，
// 如果能给这些信息装饰一下，添加上有用的信息，就能可以处理了，这就是装饰器

// 装饰器的作用： 为某些属性，方法(方法参数)，类提供元数据信息(metadata);
// 元数据：描述数据的数据